package basic;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: TODO 一些知识点
 * @Author: wzj
 * @Date: 2020/7/24 15:11
 */
public class SomeDemo {
    public static void main(String[] args) {
        /*Set<Integer> set = new HashSet<Integer>();
        List<Integer> list = new ArrayList<Integer>();

        for (int i = -3; i < 3; i++)
        {
            set.add(i);
            list.add(i);
        }

        for (int i = 0; i < 3; i++)
        {
            set.remove(i);
            list.remove(i);
        }
        System.out.println(set + "\n" + list);*/
        String str=tryCatchFinally();
        System.out.println("~~ "+str);
    }

    /**
     * 内部类使用方法内局部变量，局部变量需要定义为final，因为在编译的时候，内部类和方法同一级，如果不设置为final，相当于一个方法使用另一个方法的局部变量，这是不对的
     * 但可以使用成员变量，比如下面的j
     */
    private int j;
    public void innerClassUseVar(){
        System.out.println(this);
        int i=0;//jdk8 默认为final
        String str="str";
        List<Integer> list=new ArrayList<>();//这个jdk8下也是默认final
        j=2;
        class InnerClass{
            public void test(){
//                i=1;//基础类型有错
//                str="111";//引用类型String有错
                list.add(0);//无错 我认为的原因：这个是引用的内存地址，虽然里面的值变了，但地址没变，所以编译器认为没变
                j=1;
            }
        }
    }

    /**
     * try catch finally返回
     * @return
     */
    public static String tryCatchFinally(){
        String str="";
        try {
            str+="try";
            System.out.println("进入try："+str);
//            int i=1/0;
            return str+"[try]";
        } catch (Exception e){
            str+=" catch";
            System.out.println("进入catch："+str);
            return str+"[catch]";
        } finally {
            str+=" finally";
            System.out.println("进入finally："+str);
//            return str+"[finally]";
        }
    }
}
